"""
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    created by siyi.chen on '21/01/2025'
    comment: MQTT 服务
"""
from fastapi import APIRouter, Request

from config import Config
from project.core.function import json_response
from project.lib.decorator import api_common, exec_duration


mqtt_router = APIRouter(prefix='/mqtt', tags=['mqtt'])


@mqtt_router.get('/flow_record', summary='服务进度')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),))
@exec_duration(add_return=True)
async def get_flow(request: Request):
    """
    **订阅主题**: {0}/flow_record/设备id

    **数据格式**:json数据结构::

        {
            dev_id: 设备id
            operate: 操作类型 add(新增)/update(修改)/cancel(取消)
            data: {
                code: 服务记录编号
                icon: 服务图标
                flow_name: 服务名称
                flow_process_name: 当前节点
                status_list: 服务状态列表
                flow_time: {
                    data: 服务日期 today(今日)/tomorrow(明日)/after_tomorrow(后日)
                    time: 服务时间
                } 预计服务时间
                update_time": 更新时间
                update_time_ts": 更新时间戳
            }
            response: 语音播报内容
        }
    """
    return json_response()


@mqtt_router.get('/message', summary='消息推送')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),))
@exec_duration(add_return=True)
async def get_message(request: Request):
    """
    **订阅主题**: {0}/message/设备id

    **数据格式**:json数据结构::

        {
            expire_time: 有效时间
            expire_time_ts: 有效时间戳
            content: {
                第三方系统自定义消息内容json结构
            },
            title: 消息标题
            id: AIS消息id
            type: 消息类型
            voice: 语音播报内容
            third_party_id: 第三方系统id
            third_party_msg_id: 第三方系统消息id
        }
    """
    return json_response()


@mqtt_router.get('/radar', summary='雷达预警')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),))
@exec_duration(add_return=True)
async def get_radar(request: Request):
    """
    **订阅主题**: {0}/radar/设备id

    **数据格式**:json数据结构::

        {
            action: notify(通知)
            response: 数字人话术
            notify_object: {
                name: 姓名
                mobile: 联系号码
            } 通知对象
            replay_count: 播放次数
            after_broadcast: 播报后  only_broadcast(完成)/wakeup(打开麦克风开启交互)/call(打电话)
        }
    """
    return json_response()


@mqtt_router.get('/cariabot', summary='cariabot推送')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),))
@exec_duration(add_return=True)
async def get_cariabot(request: Request):
    """
    **订阅主题**: {0}/cariabot/机构编号

    **数据格式**:json数据结构::

        {
            action: 通知类型 column_flush(侧边栏刷新)/flow_flush(服务流程刷新)/node_flush(流程节点刷新)
            flow_code: 服务流程编号
            node_code: 流程节点编号
        }
    """
    return json_response()